﻿// 705 最大连续区间和.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <deque>

using  namespace std;
/*
http://oj.daimayuan.top/course/7/problem/510

给你 n个数字 a1,a2,...,an 和两个整数 l,r.
，你需要在 a1,a2,...,an中选出一段连续的区间满足区间长度 ∈[l,r]并且区间内的数字的和最大。
请求出满足条件的最大连续区间和。

输入格式
第一行三个整数 n,l,r。

接下来一行 n个整数 a1,a2,...,an。

输出格式
输出一行一个数，表示答案。

样例输入
6 2 3
-1 3 -3 4 -5 4
样例输出
4
数据规模
对于 100%的数据，保证 1≤l≤r≤n≤105,−1000≤ai≤1000。
*/

int front = 1, back = 0;
int n, m, a[200001], s[200001];
deque<int> q;
int l, r;
long long ans = -0x3f3f3f3f3f3f3f3f;

int main() {
	cin >> n >> l >> r;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 1; i <= n; i++) {
		s[i] += s[i - 1] + a[i];
	}

	for (int x = 1; x +l-1 <= n; x++) {
		int limitl = min(x + l - 1, n); int limitr = min(x + r - 1, n);
		int k = limitl;
		if (!q.empty()) { k = q.back() + 1; }
		for ( ; k <= limitr; k++) {
			while (!q.empty() && s[q.back()] <= s[k]) { q.pop_back(); }
			q.push_back(k);
		}
		
		while (!q.empty() && q.front() < limitl) q.pop_front();

		ans = max(ans, (long long)s[q.front()] - s[x-1]);
	}

	cout << ans << endl;

	return 0;
}

















